package com.huanling.main.keyconflictdealer;

import cn.hutool.core.collection.ListUtil;

import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

/**
 * 默认等级，不会中断
 * 仅使用该key的第一个元素构建hash表，其他相同key的元素忽略，记录冲突和重复数据到日志
 *
 * @author guibo.sun
 * @since 16 七月 2021
 */
public class DefaultConflictKeyDealer extends AbstractConflictKeyDealer implements LogNeeded {

    private ConflictKeyContext conflictKeyContext;

    @Override
    void preDeal(ConflictKeyContext conflictKeyContext, String key, Map<String, Object> oldValue, Map<String, Object> newValue) {
        this.conflictKeyContext = conflictKeyContext;
        /**
         * 如果之前没有这个key的重复数据（即目前的newValue是第二个这个key的数据）将new value和old value 都加入
         * 否则（第三个以及之后）只加入new value
         */
        conflictKeyContext.getConflictKeyItems().computeIfPresent(key, (k, maps) -> {
            maps.add(newValue);
            return maps;
        });
        conflictKeyContext.getConflictKeyItems().putIfAbsent(key, ListUtil.list(false, oldValue, newValue));
    }

    @Override
    protected Map<String, Object> getRemappingResult(String key, Map<String, Object> oldValue, Map<String, Object> newValue) {
        return oldValue;
    }

    @Override
    public List<Map<String, Object>> getLogDataList() {
        return conflictKeyContext.getConflictKeyItems().values().stream()
                .flatMap(Collection::stream)
                .collect(Collectors.toList());
    }
}
